Klíčovým programem v unixových systémech je textový editor. Důvodem je, že veškerá konfigurace se provádí pomocí textových souborů. K dispozici je jich několik. Potíž je, že každý je zcela jiný – vzhled, ovládání...
S tím se úzce pojí také problematika kódování znaků a další související věci. I to probereme.
nano Textový editor nano je v vcelku rozumná dobrá volba už proto, že je předinstalovaný ve všech linuxových distribucích. V macOS je ve výchozí instalaci editor pico, nano jde volitelně nainstalovat.
$ nano
Spustí nano a založí nový nepojmenovaný soubor. Při uložení se zeptá na název.
$ nano <soubor>
Otevře soubor k editaci. Pokud neexistuje, založí nový soubor s tímto názvem.
⚠️ Zde se často chybuje, pokud nepoužíváte k doplňování cest a názvu klávesu TAB.
Ctrl+S ... Uložení bez dotazu ("Přepsat")
Ctrl+O nebo F3 ... Uložení s dialogem ("Uložit jako")
Ctrl+X nebo F2 ... Ukončení a zavření editoru (s dotazem):
Zobrazí čísla řádků:
$ nano -lD <soubor>
Otevře soubor na zvoleném řádku (zde řádek 42):
$ nano +42 <soubor>
Zalomí dlouhé řádky:
$ nano -$ <soubor>
.nanorc Do konfiguračního souboru ~/.nanorc si uložte tyto řádky (používám já):
set softwrap
set linenumbers
set numbercolor yellow
set tabsize 4
set tabstospaces
set titlecolor blue,cyan
set keycolor cyan
set functioncolor cyan
set smarthome
Další na https://www.nano-editor.org/dist/latest/nanorc.5.html
$ ascii -d
Příkaz zobrazí základní část ASCII tabulky (prvních 128 znaků):
0 NUL 16 DLE 32 48 0 64 @ 80 P 96 ` 112 p
1 SOH 17 DC1 33 ! 49 1 65 A 81 Q 97 a 113 q
2 STX 18 DC2 34 " 50 2 66 B 82 R 98 b 114 r
3 ETX 19 DC3 35 # 51 3 67 C 83 S 99 c 115 s
4 EOT 20 DC4 36 $ 52 4 68 D 84 T 100 d 116 t
5 ENQ 21 NAK 37 % 53 5 69 E 85 U 101 e 117 u
6 ACK 22 SYN 38 & 54 6 70 F 86 V 102 f 118 v
7 BEL 23 ETB 39 ' 55 7 71 G 87 W 103 g 119 w
8 BS 24 CAN 40 ( 56 8 72 H 88 X 104 h 120 x
9 HT 25 EM 41 ) 57 9 73 I 89 Y 105 i 121 y
10 LF 26 SUB 42 * 58 : 74 J 90 Z 106 j 122 z
11 VT 27 ESC 43 + 59 ; 75 K 91 [ 107 k 123 {
12 FF 28 FS 44 , 60 < 76 L 92 \ 108 l 124 |
13 CR 29 GS 45 - 61 = 77 M 93 ] 109 m 125 }
14 SO 30 RS 46 . 62 > 78 N 94 ^ 110 n 126 ~
15 SI 31 US 47 / 63 ? 79 O 95 _ 111 o 127 DEL
Kódování konců řádků je způsob, jakým jsou konce řádků reprezentovány v textových souborech. Existují tři hlavní typy kódování:
LF (Line Feed, nový řádek, \n). Tento formát je typický pro Unixové systémy.CR (Carriage Return, návrat vozíku, \r) -- Používal se v starších systémech firmy Apple. Dnes už používá také LF.CR+LF -- Jen Windows používá oba znaky najednou (\r\n). Ano, správně: Každý řádek je tedy ukončen ne jedním, ale dvěma znaky (bajty).Znaky CR a LF pochází ještě z éry dálnopisné komunikace, kdy to mělo smysl (video s ukázkou).
Proč je důležité o tom vědět? Použití správného kódování konců řádků je důležité pro správné zobrazení textových souborů v různých operačních systémech a textových editorech.
Pro převod souboru s Windows konci řádků stačí odstranit "nadbytečný" znak CR (\r):
$ cat win_file | tr -d $'\r' > unix_file
-d odstraňuje znak \r, který je na konci řádku $.
file Příkaz file zobrazí typ souboru, kódování a typ ukončení řádků, pokud není LF. Syntaxe příkazu je:
$ file <soubor>
Příkaz vrátí jeden z následujících výstupů:
file1: ASCII text
file2: ASCII text, with CR line terminators
file3: ASCII text, with CRLF line terminators
file4: Little-endian UTF-16 Unicode text, with very long lines, with CRLF line terminators
xxd Příkaz xxd vypíše obsah souboru v hexadecimálně (výchozí způsob) nebo binárně (-b). Přepínač -u vypisuje písmena v hexa výstupu velkými písmeny (ABCDEF).
$ xxd <soubor>
$ xxd -b <soubor>
$ echo "Panska" | xxd
Příklady:
$ xxd file.txt
00000000: 4a61 726f 2c20 6c65 746f 0a Jaro, leto.
$ xxd -u file.txt
00000000: 4A61 726F 2C20 6C65 746F 0A Jaro, leto.
$ xxd -b file.txt
00000000: 01001010 01100001 01110010 01101111 Jaro
00000004: 00101100 00100000 01101100 01100101 , le
00000008: 01110100 01101111 00001010 to.
iconv Příkaz iconv převede soubor z jednoho kódování (-f) do jiného (-t). Výstup posílá na terminál. S parametrem -o [soubor] jej uloží do souboru.
iconv [soubor] [-f kodovani] [-t kodovani] [-o soubor]
Seznam všech podporovaných kódování vypíše příkaz s parametrem (-l). Je jich opravdu hodně:
$ iconv -l
V Linuxu jej nejčastěji využijete pro převod do "čistého" ASCII kódování (odstranění diakritiky). To vyžaduje dodatečný parametr //TRANSLIT:
$ iconv file -f UTF-8 -t ASCII//TRANSLIT -o file_plain